package com.medical.blood.controller;

import com.medical.blood.entity.TestResult;
import com.medical.blood.service.TestResultService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/test-result")
public class TestResultController {

    @Autowired
    private TestResultService resultService;

    /**
     * 医院系统上传检测结果（需权限校验，示例简化）
     * @param result 检测结果（含样本ID、用户ID、指标等）
     * @return 上传结果
     */
    @PostMapping("/upload")
    public Map<String, Object> uploadResult(@RequestBody TestResult result) {
        Map<String, Object> res = new HashMap<>();
        try {
            boolean success = resultService.uploadResult(result);
            res.put("success", success);
            res.put("message", success ? "结果上传成功" : "上传失败");
        } catch (Exception e) {
            res.put("success", false);
            res.put("message", e.getMessage());
        }
        return res;
    }

    /**
     * 更新检测状态（医院系统调用，示例简化）
     * @param sampleId 样本ID
     * @param userId 用户ID
     * @param newStatus 新状态
     * @param reportTime 报告时间（状态为“已出结果”时必填）
     * @return 更新结果
     */
    @PostMapping("/update-status")
    public Map<String, Object> updateStatus(
            @RequestParam Long sampleId,
            @RequestParam Long userId,
            @RequestParam String newStatus,
            @RequestParam(required = false) Date reportTime) {
        Map<String, Object> res = new HashMap<>();
        try {
            boolean success = resultService.updateStatus(sampleId, userId, newStatus, reportTime);
            res.put("success", success);
            res.put("message", success ? "状态更新成功" : "更新失败");
        } catch (Exception e) {
            res.put("success", false);
            res.put("message", e.getMessage());
        }
        return res;
    }

    /**
     * 小程序查询用户检测结果（需登录态校验，示例简化）
     * @param userId 用户ID（从登录态获取）
     * @return 检测结果列表
     */
    @GetMapping("/list")
    public List<TestResult> listResults(@RequestParam Long userId) {
        return resultService.listByUserId(userId);
    }

    /**
     * 小程序查询单个结果详情（需登录态校验，示例简化）
     * @param sampleId 样本ID
     * @param userId 用户ID
     * @return 结果详情
     */
    @GetMapping("/detail")
    public TestResult getResultDetail(
            @RequestParam Long sampleId,
            @RequestParam Long userId) {
        return resultService.getDetail(sampleId, userId);
    }
}